home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland C++ V5.02 / DIALOG.PAK / MODELESS.C < prev    next >
C/C++ Source or Header  |  1997-05-06  |  8KB  |  300 lines

  1. // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
  2. // ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
  3. // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  4. // PARTICULAR PURPOSE.
  5. //
  6. // Copyright (C) 1993-1995  Microsoft Corporation.  All Rights Reserved.
  7. //
  8. //  MODULE:   modeless.c
  9. //
  10. //  PURPOSE:   Displays the "modeless" dialog box
  11. //
  12. //  FUNCTIONS:
  13. //    CmdModeless        - Displays the "Modeless" dialog box
  14. //    Modeless           - Processes messages for "Modeless" dialog box.
  15. //    MsgModelessInit    - To initialize the modeless box with version info
  16. //                         from resources.
  17. //    MsgModelessCommand - Process WM_COMMAND message sent to the modeless
  18. //                         box.
  19. //    CmdModelessDone    - Free the modeless box and related data.
  20. //
  21. //  COMMENTS:
  22. //
  23. //
  24.  
  25. #include <windows.h>            // required for all Windows applications
  26. #include <windowsx.h>
  27. #ifdef WIN16
  28. #include "win16ext.h"           // required only for win16 applications
  29. #endif
  30. #include "globals.h"            // prototypes specific to this application
  31. #include "modeless.h"
  32.  
  33. LRESULT MsgModelessInit(HWND, UINT, WPARAM, LPARAM);
  34. LRESULT MsgModelessCommand(HWND, UINT, WPARAM, LPARAM);
  35. LRESULT CmdModelessDone(HWND, WORD, WORD, HWND);
  36. LRESULT CmdModelessColorChange(HWND, WORD, WORD, HWND);
  37.  
  38. // Modeless dialog message table definition.
  39. MSD rgmsdModeless[] =
  40. {
  41.     {WM_COMMAND,    MsgModelessCommand},
  42.     {WM_INITDIALOG, MsgModelessInit}
  43. };
  44.  
  45. MSDI msdiModeless =
  46. {
  47.     sizeof(rgmsdModeless) / sizeof(MSD),
  48.     rgmsdModeless,
  49.     edwpNone
  50. };
  51.  
  52. // Modeless dialog command table definition.
  53. CMD rgcmdModeless[] =
  54. {
  55.     {IDD_RED,         CmdModelessColorChange},
  56.     {IDD_GREEN,       CmdModelessColorChange},
  57.     {IDD_BLUE,        CmdModelessColorChange},
  58.     {IDOK,            CmdModelessDone},
  59.     {IDCANCEL,        CmdModelessDone}
  60. };
  61.  
  62. CMDI cmdiModeless =
  63. {
  64.     sizeof(rgcmdModeless) / sizeof(CMD),
  65.     rgcmdModeless,
  66.     edwpNone
  67. };
  68.  
  69. // Module specific globals
  70.  
  71. HWND    hwndModeless=0; //Window handle to modeless dialog
  72. HBRUSH  hBkgndBrush;    //Brush for background color of main window
  73. DLGPROC lpProcModeless;
  74. WORD    wIDColor;       //Dialog ID value for current color.  Used to set
  75.                         //the radio button when modeless dialog is invoked.
  76.  
  77. //
  78. //  FUNCTION: Modeless(HWND, UINT, WPARAM, LPARAM)
  79. //
  80. //  PURPOSE:  Processes messages for "Modeless" dialog box.
  81. //
  82. //  PARAMETERS:
  83. //    hdlg - window handle of the dialog box
  84. //    wMessage - type of message
  85. //    wparam - message-specific information
  86. //    lparam - message-specific information
  87. //
  88. //  RETURN VALUE:
  89. //    TRUE - message handled
  90. //    FALSE - message not handled
  91. //
  92. //  COMMENTS:
  93. //
  94. //     Display version information from the version section of the
  95. //     application resource.
  96. //
  97. //     Wait for user to click on "Ok" button, then close the dialog box.
  98. //
  99.  
  100. LRESULT CALLBACK Modeless(HWND hdlg, UINT uMessage, WPARAM wparam, LPARAM lparam)
  101. {
  102.     return DispMessage(&msdiModeless, hdlg, uMessage, wparam, lparam);
  103. }
  104.  
  105. //
  106. //  FUNCTION: MsgModelessCommand(HWND, UINT, WPARAM, LPARAM)
  107. //
  108. //  PURPOSE: Process WM_COMMAND message sent to the modeless box.
  109. //
  110. //  PARAMETERS:
  111. //    hwnd - The window handing the message.
  112. //    uMessage - The message number. (unused).
  113. //    wparam - Message specific data (unused).
  114. //    lparam - Message specific data (unused).
  115. //
  116. //  RETURN VALUE:
  117. //    Always returns 0 - message handled.
  118. //
  119. //  COMMENTS:
  120. //    Uses this DipsCommand function defined in wndproc.c combined
  121. //    with the cmdiModeless structure defined in this file to handle
  122. //    the command messages for the modeless dialog box.
  123. //
  124.  
  125. #pragma argsused
  126. LRESULT MsgModelessCommand(HWND hwnd,
  127.                            UINT uMessage,
  128.                            WPARAM wparam,
  129.                            LPARAM lparam)
  130. {
  131.     return DispCommand(&cmdiModeless, hwnd, wparam, lparam);
  132. }
  133.  
  134.  
  135. //
  136. //  FUNCTION: MsgModelessInit(HWND, UINT, WPARAM, LPARAM)
  137. //
  138. //  PURPOSE: To initialize the modeless box with version info from resources.
  139. //
  140. //  PARAMETERS:
  141. //    hwnd - The window handing the message.
  142. //    uMessage - The message number. (unused).
  143. //    wparam - Message specific data (unused).
  144. //    lparam - Message specific data (unused).
  145. //
  146. //  RETURN VALUE:
  147. //    Always returns 0 - message handled.
  148. //
  149. //  COMMENTS:
  150. //    Uses the version apis to retrieve version information for
  151. //    each of the static text boxes in the modeless box.
  152. //
  153.  
  154. #pragma argsused
  155. LRESULT MsgModelessInit(HWND hdlg,
  156.                         UINT uMessage,
  157.                         WPARAM wparam,
  158.                         LPARAM lparam)
  159. {
  160.     // Center the dialog over the application window
  161.     CenterWindow(hdlg, GetWindow(hdlg, GW_OWNER));
  162.     if (hBkgndBrush)
  163.         CheckRadioButton(hdlg, IDD_RED, IDD_BLUE, wIDColor);
  164.  
  165.      return TRUE;
  166. }
  167.  
  168.  
  169. //
  170. //  FUNCTION: MsgPaint(HWND, UINT, WPARAM, LPARAM)
  171. //
  172. //  PURPOSE: Fills the windows background with a specific color,
  173. //           if background brush exists.  Brush is created via the 
  174. //           modeless dialog
  175. //
  176. //  PARAMETERS:
  177. //
  178. //    hwnd      - Window handle  (Unused)
  179. //    uMessage  - Message number (Unused)
  180. //    wparam    - Extra data     (Unused)
  181. //    lparam    - Extra data     (Unused)
  182. //
  183. //  RETURN VALUE:
  184. //
  185. //    Always returns 0 - Message handled
  186. //
  187. //  COMMENTS:
  188. //
  189. //
  190.  
  191. LRESULT MsgPaint(HWND hwnd, UINT uMessage, WPARAM wparam, LPARAM lparam)
  192. {                          
  193.     PAINTSTRUCT ps;
  194.     HDC         hDC;
  195.     RECT        rect;
  196.  
  197.     if (hBkgndBrush)
  198.     {
  199.         hDC = BeginPaint(hwnd, &ps);
  200.         GetClientRect(hwnd, &rect);
  201.         FillRect(hDC, &rect, hBkgndBrush);
  202.         EndPaint(hwnd, &ps);
  203.         return 0;
  204.     }
  205.     else
  206.         return DefWindowProc(hwnd, uMessage, wparam, lparam);
  207. }
  208.  
  209.  
  210. //
  211. //  FUNCTION: CmdModelessColorChange(HWND, WORD, HWND)
  212. //
  213. //  PURPOSE: Update the background color of the main application
  214. //
  215. //  PARAMETERS:
  216. //    hwnd - The window handling the command.
  217. //    wCommand - The command to be handled (unused).
  218. //    hwndCtrl - NULL (unused).
  219. //
  220. //  RETURN VALUE:
  221. //    Always returns TRUE.
  222. //
  223. //  COMMENTS:
  224. //    Creates a new brush and invalidates the main window
  225. //
  226.  
  227. #pragma argsused
  228. LRESULT CmdModelessColorChange(HWND hdlg,
  229.                                WORD wCommand,
  230.                                WORD wNotify,
  231.                                HWND hwndCtrl)
  232. {
  233.     COLORREF rgbColor = 0;
  234.  
  235.     if (wCommand == wIDColor)
  236.         return(TRUE);
  237.  
  238.      wIDColor = wCommand;
  239.  
  240.     if (hBkgndBrush)
  241.         DeleteObject(hBkgndBrush);
  242.  
  243.     switch(wIDColor)
  244.     {
  245.         case IDD_RED:
  246.             rgbColor = RGB(255, 0, 0);
  247.             break;
  248.  
  249.         case IDD_GREEN:
  250.             rgbColor = RGB(0, 255, 0);
  251.                 break;
  252.  
  253.         case IDD_BLUE:
  254.             rgbColor = RGB(0, 0, 255);
  255.             break;
  256.  
  257.         default:
  258.             break;
  259.     }
  260.  
  261.     hBkgndBrush = CreateSolidBrush(rgbColor);
  262.  
  263.     InvalidateRect(GetWindow(hdlg, GW_OWNER), NULL, TRUE);
  264.  
  265.     return TRUE;
  266. }
  267.  
  268. //
  269. //  FUNCTION: CmdModelessDone(HWND, WORD, HWND)
  270. //
  271. //  PURPOSE: Free the modeless box and related data.
  272. //
  273. //  PARAMETERS:
  274. //    hwnd - The window handling the command.
  275. //    wCommand - The command to be handled (unused).
  276. //    hwndCtrl - NULL (unused).
  277. //
  278. //  RETURN VALUE:
  279. //    Always returns TRUE.
  280. //
  281. //  COMMENTS:
  282. //    Calls DestroyWindow to finish the dialog session.
  283. //
  284.  
  285. #pragma argsused
  286. LRESULT CmdModelessDone(HWND hdlg,
  287.                                 WORD wCommand,
  288.                                 WORD wNotify,
  289.                                 HWND hwndCtrl)
  290. {
  291.  
  292.      DestroyWindow(hdlg);          // Exit the dialog
  293. #ifdef _ _WIN32_ _
  294.      FreeProcInstance(lpProcModeless);
  295. #endif
  296.      lpProcModeless = NULL;
  297.      hwndModeless = NULL;
  298.      return TRUE;
  299. }
  300.